package com.hzw.saas.api.email;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hzw.saas.api.email.bo.EmailLogBO;
import com.hzw.saas.api.email.bo.EmailLogBriefBO;
import com.hzw.saas.api.email.query.EmailLogAddQuery;
import com.hzw.saas.api.email.query.EmailLogSendQuery;
import com.hzw.saas.api.email.query.EmailLogUpdateQuery;
import com.hzw.saas.common.config.util.PageParam;
import com.hzw.saas.common.util.exception.ConflictException;

/**
 * @author zzl
 * @since 09/08/2021
 */
public interface IEmailLogService {

    /**
     * 分片获取邮件记录概要列表
     *
     * @param pageParam 分页参数
     * @param from      发件人，此处为后台管理员ID
     * @param type      邮件类型，忽略null
     * @param status    邮件状态，忽略null
     * @param fuzzy     模糊检索参数
     * @return 邮件记录概要分页列表
     */
    IPage<EmailLogBriefBO> pageEmailBrief(PageParam pageParam, String from, Integer type, Integer status, String fuzzy);

    /**
     * 获取邮件详情，含邮件正文
     *
     * @param pid 邮件PID
     * @return 邮件详情
     */
    EmailLogBO getEmail(String pid);

    /**
     * 保存草稿
     *
     * @param query 邮件信息
     * @return 邮件ID
     */
    String saveDraft(EmailLogAddQuery query);

    /**
     * 保存邮件记录
     *
     * @param query 邮件记录参数
     * @return 邮件记录
     */
    boolean sendEmail(EmailLogSendQuery query);

    /**
     * 重新发送
     * 若之前已成功投递，重新发送后会生成新的发送记录
     *
     * @param pid   邮件ID
     * @param force 强制重新发送邮件（即使之前已发送成功）
     * @return boolean
     */
    boolean resendEmail(String pid, Boolean force) throws ConflictException;

    /**
     * 更新邮件草稿
     *
     * @param query 邮件记录参数
     * @return boolean
     */
    boolean updateDraft(EmailLogUpdateQuery query);

    /**
     * 删除邮件记录
     *
     * @param pids pids
     * @return boolean
     */
    boolean deleteEmailLogs(String... pids);

}
